package m

import (
	"github.com/globalsign/mgo/bson"
	log "github.com/sirupsen/logrus"

	"GameServer/Game/cache"
	"GameServer/Game/dbmodule"
	"GameServer/Game/errors"
)

type NewGuide struct {
	BaseM
	Uid                  bson.ObjectId `bson:"_id" json:"id"`
	Content              string        `bson:"content" json:"content"`
	FirstCardMonsterGold bool          `bson:"firstCardMonsterGold" json:"firstCardMonsterGold"` // 第一次 卡牌战斗 金钱

	TargetAssig int64 `bson:"targetAssig" json:"targetAssig"` // 指定三次事件 攻击 偷钱 获取体力

	PushActive bool  `bson:"pushActive" json:"pushActive"` // 新手，达到1-2关，推送活动。
	OpenGrid   int64 `bson:"openGrid" json:"openGrid"`     // 新手达到1-2关，记录打开格子数 -1：不需要记录，打开5,80,200格子，提示加入公会
	Reminders  int64 `bson:"reminders" json:"reminders"`   // 提示玩家加入公会次数

	SlotFlag       bool `bson:"slotFlag" json:"slotFlag"`             // 老虎机引导是否完成
	SlotRewardFlag bool `bson:"slotRewardFlag" json:"slotRewardFlag"` // 新手引导是否已经领取奖励

	SlotGuidId int64 `bson:"slotGuidId" json:"slotGuidId"` // 老虎机引导顺序id
	SlotEvent  int64 `bson:"slotEvent" json:"slotEvent"`   // 当前引导事件
	RewardCnt  int64 `bson:"rewardCnt" json:"rewardCnt"`   // 引导的事件，执行次数
}

func NewUserNewGuide() cache.EntryI {
	return &NewGuide{}
}

// 保存信息
func (uNewGuide *NewGuide) Save() (err error) {
	err = dbmodule.MgoDB.GameDB.Upsert("userNewGuide", bson.M{"_id": uNewGuide.Uid}, uNewGuide)
	if err != nil {
		return
	}
	return
}

func (uNewGuide *NewGuide) Load(key interface{}) (err error) {
	switch key.(type) {
	case string:
		if key.(string) == "" {
			return errors.New("无效的key load, key empty")
		}
		uNewGuide.Uid = bson.ObjectIdHex(key.(string))
	case bson.ObjectId:
		uNewGuide.Uid = key.(bson.ObjectId)
	default:
		log.WithFields(log.Fields{
			"method": "UserPet_Load",
			"data":   key,
		}).Error("无效的key load")
		return errors.New("无效的key load")
	}
	return uNewGuide.LoadData()
}

// 加载数据
func (uNewGuide *NewGuide) LoadData() (err error) {
	err = dbmodule.MgoDB.GameDB.FindOne("userNewGuide", bson.M{"_id": uNewGuide.Uid}, nil, &uNewGuide)
	if err != nil {
		if err.Error() == "not found" {
			return nil
		}
		return
	}
	return
}

// 更新数据
func (uNewGuide *NewGuide) Update(val *NewGuide) {
	Cache.Put("userNewGuide", uNewGuide.Uid.Hex(), val)
	val.UpdateData()
}

func (u *User) GetNewGuide() (r *NewGuide) {
	v, _ := Cache.Get("userNewGuide", u.Uid.Hex())
	r = v.(*NewGuide)
	return
}
